package com.buba.springboot.utils;

import com.buba.springboot.utils.CommonResult;
import com.buba.springboot.congif.FilePropertiesConfig;
import com.buba.springboot.filemanager.entity.fileManager;
import com.buba.springboot.congif.FilePropertiesConfig;
import com.buba.springboot.utils.CommonResult;
import com.sun.javafx.iio.ImageFrame;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.UUID;

/**
 * @author: 桂秋拾貳
 * @date: 2022/7/19 16:31
 * @description:
 */
@Component
@Data
public class FileUplode {

    /**
     * 文件名称
     */
    private String fileName;
    /**
     *  加密文件名称
     */
    private String uuidFileName;
    /**
     *  文件大小
     */
    private Long fileSize;
    /**
     *  文件类型
     */
    private String fileType;
    /**
     *  文件路径
     */
    private String filePath;
    /**
     * 上传时间
     */
    private Date createTime;
    private Integer id;
    @ApiModelProperty
    private String usercode;
    @ApiModelProperty
    private String username;
    @ApiModelProperty
    private String password;
    @ApiModelProperty
    private Integer role;
    @ApiModelProperty
    private String createdby;
    @ApiModelProperty
    private LocalDateTime creationdate;
    @ApiModelProperty
    private String address;
    @ApiModelProperty
    private String email;
    @ApiModelProperty
    private Integer delete_flag;
    @Autowired
    private FilePropertiesConfig filePropertiesConfig;

    /**
     * @Author 桂秋拾貳
     * @Description 判断文件是否复合 获取文件信息
     * @Date 16:56 2022/7/19
     * @param multipartFile
     * @Return com.buba.carsharing.common.CommonResult
     **/
    public CommonResult fileInfo(MultipartFile multipartFile) {
        // 获取文件名称
        String fileName = multipartFile.getOriginalFilename();
        // 获取文件后缀（获取文件类型）
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        // 获取文件大小
        long size = multipartFile.getSize();
        // 图片和文件路径
        String path = "";
        // 全路径名
        String fullPath = "";
        // 格式化日期
        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());

        // 判断文件或者图片的类型是否符合  contains() 是否包含
        // 判断文件是否为文件类型
        if (filePropertiesConfig.getFileType().toLowerCase().contains(fileType.toLowerCase())) {
            // 获取配置中文件大小限制并转换为字节
            String fileSize = filePropertiesConfig.getFileSize();
            long byteFileSize = 0L;
            if (!StringUtils.isEmpty(fileSize)) {
                byteFileSize = Integer.parseInt(fileSize)*1024*1024;
            }
            // 判断文件是否为空
            if (size > 0 && size < byteFileSize) {
                // 拼接图片存储路径 /image/日期
                path = filePropertiesConfig.getFilePath() + File.separator + date;
            } else {
                return CommonResult.fail("文件大小不符合");
            }
            // 判断文件是否为图片
        } else if (filePropertiesConfig.getImageType().toLowerCase().contains(fileType.toLowerCase())) {
            // 获取配置中图片大小限制并转换为字节
            String imageSize = filePropertiesConfig.getImageSize();
            long byteImageSize = 0L;
            if (!StringUtils.isEmpty(imageSize)) {
                byteImageSize = Integer.parseInt(imageSize)*1024*1024;
            }
            // 判断文件是否为空
            if (size > 0 && size < byteImageSize) {
                // 拼接图片存储路径 /image/日期
                path = filePropertiesConfig.getImagePath() + File.separator + date;
            } else {
                return CommonResult.fail("图片大小不符合");
            }
            // 不是图片也不是文件
        } else {
            return CommonResult.fail("不支持此类型文件");
        }

        // 获取 UUID 去掉‘-’ 用于拼接加密后的文件名
        String uuid = UUID.randomUUID().toString().replace("-", "");
        // 加密后的文件名称
        String uuidName = uuid + fileType;
        // 全路径：E:/file/image/日期/加密后文件名
        fullPath = filePropertiesConfig.getRootPath() + path + File.separator + uuidName;

        // 创建文件信息实例对象
        FileUplode fileUpload = new FileUplode();
        fileUpload.setFileName(fileName);
        fileUpload.setUuidFileName(uuidName);
        fileUpload.setFileSize(size);
        fileUpload.setFileType(fileType);
        fileUpload.setFilePath(fullPath);
        fileUpload.setCreateTime(new Date());

        //将文件信息发回给CommonResult
        return CommonResult.ok(fileUpload);
    }

    /**
     * @Author 桂秋拾貳
     * @Description 文件上传
     * @Date 9:10 2022/7/20
     * @param fullPath
     * @param multipartFile
     * @Return void
     **/
    public void fileUplode(String fullPath,MultipartFile multipartFile) {
        // 创建文件
        File file = new File(fullPath);
        // 判断文件夹是否存在
        if (!(file.getParentFile().exists())) {
            file.mkdirs();
        }
        // 将文件上传
        try {
            multipartFile.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
